Xcode Source Editor Extension を使って、空白を除去するプラグインを作る
Xcode Source Editor Extension で何か実用的なものを…
「Xcode Source Editor Extension」は、Xcode 8 から作れるようになった Xcode の Source Editor の機能拡張のことです。Xcode の Source Editor を拡張するような機能を、誰でも実装し提供することができます。
Xcode Source Editor Extension の基本は、以下の記事で紹介しています。
せっかく覚えたので、何か実用的なものを…と思い、ソースコード上の末尾の空白を除去するプラグインを簡単ですが作りました。Xcode ではすでにスペースのみの行を空行にする設定がありますが、これのスペースのみじゃないバージョン、といった位置付けです。
実装
Xcode Source Editor Extension のプロジェクトの作成などはこちらの記事で紹介していますので、割愛します。実装は XCSourceEditorCommand プロトコルに準拠したクラスの perform:with:completionHandler:
メソッドで実装します。
import Foundation import XcodeKit class SourceEditorCommand: NSObject, XCSourceEditorCommand { func perform(with invocation: XCSourceEditorCommandInvocation, completionHandler: @escaping (Error?) -> Void ) -> Void { let textBuffer = invocation.buffer let lines = textBuffer.lines let lineCount = lines.count for lineIndex in 0..<lineCount { if let string = lines[lineIndex] as? String { var replaced = String(string.characters.dropLast()) while replaced.characters.last == " " { replaced = String(replaced.characters.dropLast()) } lines.replaceObject(at: lineIndex, with: replaced) } } completionHandler(nil) } }
invocation.buffer.lines
の配列の中に、表示中のソースコードが1行ずつ分割されて入っています。この1行ずつを対象に、末尾が空白であるか比較し、空白であった場合に dropLast
で削ります。はじめに一度 dropLast
を行っているのは、改行コードを削るためです。
使ってみる
末尾に空白がある行を用意します。
コマンドを実行します。
消えました!
まとめ
非常に簡単な実装ではありますが、ちょっと役立つ (かもしれない) プラグインが簡単にできました。ネットサーフィンをしてみると、=
のインデントを揃えるプラグインや、突然の死の AA に変換するプラグインなど、役立つものから面白いものまで、いろいろなプラグインが作られているようでした。私も、引き続きプラグイン開発に挑戦していきたいと思います。
何かできたら、またブログでご紹介します。